<?php
/*
 * FileName index.ctrl.php
 * Date		2012-7-25
 * Author	jime
 * Mail 	me@joyphper.net
 * QQ		97142822
 * Copyright (C) 2012 joyphper.net
 */
if (! defined ( 'App_PATH' ))exit ( 'request error' );
class Mysql {

	public $arrSql =array(); 	//执行的SQL语句记录
	public $queryRes =array();	//获取所有sql语句的执行结果
	private $linkID; 			//数据库的连接句柄
	private $result; 			//执行的结果
	/**
	 * 初始化Mysql类
	 */
	public function __construct($conf)
	{
		$this->linkID 	= 	null;
		$this->result 	= 	null;
		$this->openMysql($conf["Host"],$conf["Port"],$conf["Database"],$conf["User"],$conf["Pwd"],$conf["Language"]);
	}
	/**
	 * 打开一个数据库连接
	 */
	private function openMysql($dbHost,$dbPort,$dbName,$dbUser,$dbPwd,$language)
	{
		$this->linkID = @mysql_connect ( $dbHost.":".$dbPort, $dbUser, $dbPwd);
		if (! $this->linkID)
		{
			appError ( '系统错误警告：连接数据库失败，可能数据库密码不对或数据库服务器出错！' );
		}
		$selectDb = @mysql_select_db ( $dbName );
		if (! $selectDb) {
			appError( '系统错误警告：选择数据库失败，请确认' . $dbName . '是否存在' );
		}
		@mysql_query ( "SET NAMES '" . $language . "', character_set_client=binary, sql_mode='', interactive_timeout=3600 ;", $this->linkID );
		
		return true;
	}
	/**
	 * 执行一个SQL语句
	 * 
	 * @param sql 需要执行的SQL语句，Mysql驱动中所有的sql都要通过此方法去执行
	 */
	public function query($sql){
		
		$this->arrSql[] = $sql;
		if( $this->result = mysql_query($sql, $this->linkID) ){
			$this->queryRes[]=true;
			return $this->result;
			
		}else{
			$this->queryRes[]=false;
			appError("{$sql}<br />执行错误: " . $this->getError());
			
		}
	}
	/**
	 * 按SQL语句获取记录结果，返回数组
	 * 
	 * @param sql  执行的SQL语句
	 */
	public function getArray($sql)
	{
		if( ! $this->query($sql) )return array();
		
		if( ! mysql_num_rows($this->result) )return array();
		
		$rows = array();
		
		while($rows[] = mysql_fetch_array($this->result,MYSQL_ASSOC)){}
		
		$this->freeResult();
		
		array_pop($rows);
		
		return $rows;
	}
	
	/**
	 * 获取数据表结构
	 *
	 * @param $tableName  表名称
	 */
	public function getTable($tableName)
	{
		return $this->getArray("DESCRIBE ".$tableName);
	}
	/**
	 * 对特殊字符进行过滤
	 *
	 * @param $value  值
	 */
	public function __val_escape($value) {
		
		if(is_null($value))return 'NULL';
		
		if(is_bool($value))return $value ? 1 : 0;
		
		if(is_int($value))return (int)$value;
		
		if(is_float($value))return (float)$value;
		
		if(@get_magic_quotes_gpc())$value = stripslashes($value);
		
		return '\''.mysql_real_escape_string($value, $this->linkID).'\'';
	}
	/**
	 * 获取查询的记录条数
	 */
	public function getNumberRows(){
		if (!$this->result){
			return 0;
		}else{
			return mysql_num_rows ( $this->result);
		}
	}
	/**
	 * 返回影响行数
	 */
	public function affectedRows()
	{
		return mysql_affected_rows($this->linkID);
	}
	/**
	 * 获取上一步INSERT操作产生的ID
	 */
	public function getInsertId()
	{
		return @mysql_insert_id ( $this->linkID );
	}

	/**
	 * 释放记录集占用的资源
	 */
	public function freeResult()
	{
		@mysql_free_result ( $this->result);
	}
	/**
	 * 事物处理标志
	 */
	public function transaction()
	{
		mysql_query("START TRANSACTION;", $this->linkID);
		mysql_query("SET AUTOCOMMIT=0;", $this->linkID);
	}
	/**
	 * 事务提交
	 */
	public function commit()
	{
		mysql_query("COMMIT;", $this->linkID);
	}
	/**
	 * 事务回滚
	 */
	public function rollback()
	{
		mysql_query("ROLLBACK;", $this->linkID);
	}
	/**
	 * 获取mysql执行错误
	 */
	public function getError() {
		return mysql_error () . ':' . mysql_errno ();
	}
	/**
	 * 析构函数
	 */
	public function __destruct()
	{
		@mysql_close($this->linkID);
	}
}
?>